package club.bigtian.statusbar;

import com.intellij.notification.Notification;
import com.intellij.notification.NotificationGroupManager;
import com.intellij.notification.NotificationType;
import com.intellij.notification.Notifications;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.Nullable;

/**
 * 通知工具类
 * 用于显示各种类型的通知消息
 */
public class NotificationUtil {
    
    private static final String NOTIFICATION_GROUP_ID = "Augment Token Manager";
    
    /**
     * 显示成功通知
     * @param title 标题
     * @param content 内容
     */
    public static void showSuccess(String title, String content) {
        showSuccess(null, title, content);
    }
    
    /**
     * 显示成功通知
     * @param project 项目实例（可为null）
     * @param title 标题
     * @param content 内容
     */
    public static void showSuccess(@Nullable Project project, String title, String content) {
        showNotification(project, title, content, NotificationType.INFORMATION);
    }
    
    /**
     * 显示错误通知
     * @param title 标题
     * @param content 内容
     */
    public static void showError(String title, String content) {
        showError(null, title, content);
    }
    
    /**
     * 显示错误通知
     * @param project 项目实例（可为null）
     * @param title 标题
     * @param content 内容
     */
    public static void showError(@Nullable Project project, String title, String content) {
        showNotification(project, title, content, NotificationType.ERROR);
    }
    
    /**
     * 显示警告通知
     * @param title 标题
     * @param content 内容
     */
    public static void showWarning(String title, String content) {
        showWarning(null, title, content);
    }
    
    /**
     * 显示警告通知
     * @param project 项目实例（可为null）
     * @param title 标题
     * @param content 内容
     */
    public static void showWarning(@Nullable Project project, String title, String content) {
        showNotification(project, title, content, NotificationType.WARNING);
    }
    
    /**
     * 显示信息通知
     * @param title 标题
     * @param content 内容
     */
    public static void showInfo(String title, String content) {
        showInfo(null, title, content);
    }
    
    /**
     * 显示信息通知
     * @param project 项目实例（可为null）
     * @param title 标题
     * @param content 内容
     */
    public static void showInfo(@Nullable Project project, String title, String content) {
        showNotification(project, title, content, NotificationType.INFORMATION);
    }
    
    /**
     * 显示通知
     * @param project 项目实例（可为null）
     * @param title 标题
     * @param content 内容
     * @param type 通知类型
     */
    private static void showNotification(@Nullable Project project, String title, String content, NotificationType type) {
        try {
            // 尝试使用NotificationGroupManager（新版本API）
            Notification notification = NotificationGroupManager.getInstance()
                .getNotificationGroup(NOTIFICATION_GROUP_ID)
                .createNotification(title, content, type);
            
            notification.notify(project);
        } catch (Exception e) {
            // 如果NotificationGroupManager不可用，使用旧版本API
            try {
                Notification notification = new Notification(
                    NOTIFICATION_GROUP_ID,
                    title,
                    content,
                    type
                );
                Notifications.Bus.notify(notification, project);
            } catch (Exception ex) {
                // 如果通知失败，至少在控制台输出
                System.err.println("通知显示失败: " + title + " - " + content);
                ex.printStackTrace();
            }
        }
    }
    
    /**
     * 显示账户切换成功通知
     * @param project 项目实例
     * @param domain 域名
     * @param email 邮箱
     */
    public static void showAccountSwitchSuccess(@Nullable Project project, String domain, String email) {
        String content = String.format(
            "已切换到账户: %s\n邮箱: %s",
            domain,
            email
        );
        showSuccess(project, "账户切换成功", content);
    }
    
    /**
     * 显示账户切换失败通知
     * @param project 项目实例
     * @param domain 域名
     * @param reason 失败原因
     */
    public static void showAccountSwitchError(@Nullable Project project, String domain, String reason) {
        String content = String.format(
            "切换到账户 %s 失败\n原因: %s",
            domain,
            reason
        );
        showError(project, "账户切换失败", content);
    }
    
    /**
     * 显示Token数据不完整通知
     * @param project 项目实例
     */
    public static void showTokenDataIncomplete(@Nullable Project project) {
        showWarning(project, "Token数据不完整", "无法切换账户，请检查tokens.json文件");
    }
    
    /**
     * 显示Augment插件未安装通知
     * @param project 项目实例
     */
    public static void showAugmentPluginNotFound(@Nullable Project project) {
        showError(project, "Augment插件未安装", "请先安装Augment插件后再使用此功能");
    }

    /**
     * 显示Token配置文件不存在的警告通知
     */
    public static void showTokenConfigNotFound(@Nullable Project project, String configPath) {
        showWarning(project,
            "未找到Token配置文件",
            "请先在Tauri应用中添加token数据\n配置文件路径: " + configPath);
    }

    /**
     * 显示Token配置文件为空的警告通知
     */
    public static void showTokenConfigEmpty(@Nullable Project project) {
        showWarning(project,
            "Token配置文件为空",
            "请先在Tauri应用中添加token数据");
    }
}

